#ifndef ___fuse_flush
#define ___fuse_flush 1

#ifndef FUSE_USE_VERSION
#define FUSE_USE_VERSION 28
#endif

#include <stdio.h>
#include <stdlib.h>
#include "mtlib.c"
#include <fuse.h>
#include <fcntl.h>
#include <errno.h>
#include "logging.c"

//Prototipos
int fuse_flush(const char *, struct fuse_file_info *);

//PERSISTE LOS DATOS A ESCRIBIR EN LA CACHE DEL PFS
int fuse_flush(const char * path, struct fuse_file_info * ptr) { //se va a llamar a flush cada vez que se cierra y abre un
    //descriptor de archivo

    int resultado;
    uint64_t descriptor;
    unsigned char centro_flush = 0;
    unsigned int descriptorConexion;

        descriptor = ptr -> fh;

        while (!centro_flush)
            centro_flush = mtf_obtener_descriptor(1024);

        descriptorConexion = mtf_conectar(centro_flush, MTP_INTERNO, centro_fat);

        if (descriptorConexion == 0) {
            mtf_liberar_descriptor(centro_flush);
            return -EAGAIN;
        }

        resultado = mtf_enviar_mensaje(centro_flush, descriptorConexion, MTQ_ESCRIBIR_DATOS_CACHE, (long long) descriptor);

        if (resultado == 0) {
            mtf_desconectar(centro_flush, descriptorConexion);
            mtf_liberar_descriptor(centro_flush);
            return -EAGAIN;

        } else {
            ptr -> flush = 1;
            log_registrar(descArch, "FUSE", LOG_INFO, "Flush datos %lld \n", descriptor);
            mtf_desconectar(centro_flush, descriptorConexion);
            mtf_liberar_descriptor(centro_flush);
            return EXIT_SUCCESS;
            }

}

#endif
